//检测是不是一个promise
function isPromise(obj) {
  return (
    !!obj &&
    (typeof obj === "object" || typeof obj === "function") &&
    typeof obj.then == "function"
  );
}

export default function promiseMiddleware({ getState, dispatch }) {
  return function (next) {
    return function (action) {
      // 判断action是不是一个标准的promise对象
      if (isPromise(action)) {
        // 如果action是一个promise 则将其resolve的值(action)进行dispatch
        action.then(dispatch);
      } else if (isPromise(action.payload)) {
        // 或者action.payload是一个promise 则将其resolve的值(action)进行dispatch
        action.payload
          .then(function (result) {
            dispatch({ ...action, payload: result });
          })
          .catch(function (error) {
            dispatch({ ...action, payload: error, error: true });
            return Promise.reject(error);
          });
      } else {
        //否者交给其他中间件来处理
        next(action);
      }
    };
  };
}
